[UPDATE] Amazon CloudFrontのOACでAWS Elemental MediaPackage Originをサポートしました!
はじめに
清水です。Amazon CloudFrontのオリジンへのアクセス制御方式であるOrigin Access Control (OAC)で、新たにAWS Elemental MediaPackageをサポートするアップデートがありました!2024/04/11付けでAWS What's Newに掲載されています。
Amazon CloudFront now supports Origin Access Control (OAC) for AWS Elemental MediaPackage Origin
CloudFrontのオリジンへのアクセス制御方式であるOACについて
CloudFrontでは従来から、オリジンがS3の場合にOrigin Access Identity (OAI)という機能を用いてアクセス制御が行えました。さらに2022年8月にはOrigin Access Control (OAC)という機能が登場し、OAIで未サポートだったS3側のSSE-KMSへの対応やセキュリティ体制の強化などが行われました。
2024年の現在では、オリジンがS3の場合には上記OACを用いてアクセス制限を行うことがベストプラクティスです。例えばAWS Security Hubのコントロールでも、OAIをチェックする[CloudFront.2]
は2023/09/20付けで廃止され、代わりにOACをチェックする[CloudFront.13]
を参照するよう案内されています。
さてこのCloudFrontのOACですが、2023年2月にはライブ動画配信時のオリジンとして使用できるAWSサービスであるAWS Elemental MediaStoreにも対応していました。
OACのMediaStore対応からおよそ1年、同じくライブ動画配信時にオリジンとして使用できるAWSサービスであるAWS Elemental MediaPackageにもOACが対応したのが今回のアップデートとなります。なお詳細は後述しますが、今回OACサポート対象となるのはMediaPackageの中でもMediaPackage v2のみです。MediaPackage v1については今回のアップデート対象外となる点などに注意しましょう。
なお、今回のOACのMediaPackageサポートと時を同じくして、OACはLambda function URLもサポートしました。
- Amazon CloudFront now supports Origin Access Control (OAC) for Lambda function URL origins
- CloudfrontのOAC を利用した Lambdaの 関数URL実行を試してみた | DevelopersIO
これでOACで選択できるOrigin typeとしては、S3
、MediaStore
、MediaPackage V2
、そしてLambda
の4種類になったわけですね。
MediaPackageのCDN利用時のオリジン保護について
MediaPackageに対応したOACについて実際に確認する前に、MediaPackageのCDN利用時のオリジン保護方法についても振り返っておきましょう。
MediaPackage v1のオリジン保護
2017年11月のAWS Elemental MediaPackageリリース当時、MediaPackage(2024年4月現在でいうところのMediaPackage Live v1)にはCDN利用時のオリジン保護機能がありませんでした。CDN認証機能が利用可能になり、オリジン保護ができるようになったのが2020年1月のことです。
このMediaPackageのCDN認証機能、アクセスの際にはX-MediaPackage-CDNIdentifier
というカスタムヘッダを付与してアクセス、ヘッダの値として事前に設定した文字列を用いて認証を行うかたちです。なお、CDN認証機能リリース当時はMediaPackage Liveのみの対応で2019年7月にリリースしたMediaPackage VODには非対応でしたが、2020年6月にはMediaPackage VODでもCDN認証をサポートしました。
MediaPackage v2のオリジン保護
さらに2023年5月にはMediaPackage v2がリリースされます。(以降、v2以前のMediaPackageをMediaPackage v1と称するようになりました。)
MediaPackage v2ではよりAWSらしく、Ingestの保護に利用できるChannel policy、Egressの保護に利用できるEndpoint policyという2つのPolicyが利用可能になりました。
MediaPackage v1のようなCDN認証という機能はないのですが、Endpoint policyを上手に活用することでCDN認証と同等のオリジン保護を実現することができました。
OACはMediaPackage Live v2をサポート
さて、このようにMediaPackage向けにもオリジンを保護する機能はあったのですが、リクエスト時のヘッダの値を使ったCDN認証というかたちです。認証情報のローテーションなど運用の手間が発生しますよね。そこで今回のアップデート、OACのMediaPackageサポートです!OACはリリース時より、「短期間の認証情報とより頻繁な認証情報のローテーション」ということが謳われています。CDN認証でオリジンを保護するよりも、より強化されたセキュリティ実装によりアクセス制御が利用可能になったわけですね。
なお今回のアップデートでMediaPackageをサポートしたOACですが、MediaPackage v2のみをサポートしており、MediaPackage v1はサポートしていません。 (AWS What's NewのポストやCloudFront Developer Guideにもその旨、記載があります。)さらにいえば、MediaPackageにはLive配信用とVOD配信用のそれぞれの機能がありますが、v2に対応しているのはLive配信用のみです。(MediaPackage v2のUser Guideで「Delivering VOD content from AWS Elemental MediaPackage」を確認すると、v2では対応していないのでv1を参照するよう、記載がありますね。)つまり、MediaPackage Live v2のみが今回のOACのサポート対象である ということになりますので、注意しましょう。
OACを使ってMediaPackageにアクセス
OACならびにMediaPackageのオリジン保護機能について確認できたところで、実際に今回のアップデートであるCloudFront OACを使ったMediaPackageオリジンへのアクセスを確認してみたいと思います。検証環境としてAWS Elemental MediaLiveならびにMediaPackage v2のリソースを準備します。MediaLive Channelに映像を打ち上げ、MediaPackageからライブストリームが視聴できることを確認します。そしてオリジンをMediaPackageとしてOACを設定したCloudFront Distributionを作成します。MediaPackage側でもOACからのアクセスのみを許可するよう設定して、CloudFrontを経由したアクセスのみをMediaPackageが許可している状態を確認します。
MediaLiveとMediaPackageリソースの準備
まずはMediaPackage v2のリソースならびに連携するMediaLiveリソースを準備します。以下エントリと同様の手順でMediaPackage v2のChannel groupとChannel、そしてOrigin endpointの各リソースを準備しました。MediaPackage v2にIngestするMediaLiveリソースも同様に、下記のエントリの手順で準備します。
今回のアップデートのポイントとなるMediaPackage v2のEgressを保護するEndpoint policyについて確認しておきましょう。OACを使ってアクセス制限を行う際、MediaPackage側ではこのEndpoint policyで権限を設定します。設定内容については後述します。現段階ではまだ以下のようにパブリックアクセス可能なポリシー(Attach a public policy
を選択)である状態です。
{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "AllowUser", "Effect" : "Allow", "Principal" : "*", "Action" : "mediapackagev2:GetObject", "Resource" : "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-channel-group/channel/mediapackage-v2-channel/originEndpoint/mediapackage-v2-origin-endpoint" } ] }
実際に現段階ではMediaPackageのOrigin Endpointがパブリックアクセス可能である点についても確認しておきましょう。MediaLive ChannelをStartさせ映像を打ち上げます。Manifest settingsタブのHLS manifest definitionsのURLをコピーして、macOSのSafariブラウザで再生してみました。ライブストリームの視聴ができていますね。
curlコマンドでも確認してみます。HLS manifest definitionsのURLにcurlコマンドでGETリクエストを投げた結果が以下です。HTTPステータス200が返り、MediaPackageのOrigin Endpointにアクセスできていることが確認できます。
% curl -i https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-origin-endpoint/hls-index.m3u8 HTTP/2 200 date: Tue, 23 Apr 2024 10:34:29 GMT content-type: application/vnd.apple.mpegurl content-length: 382 x-amzn-requestid: 7bxxxx69-4xx1-4xx7-9xxd-5fxxxxxxxx1e x-amzn-mediapackage-endpoint-id: mediapackage-v2-origin-endpoint access-control-allow-origin: * x-amzn-mediapackage-channel-uniqueid: f3xxxxxxxxxxxxxxxxxxxxxxxxxxxx9c x-amzn-mediapackage-endpoint-uniqueid: 2axxxxxxxxxxxxxxxxxxxxxxxxxxxx61 cache-control: max-age=3 access-control-expose-headers: x-amzn-requestid,x-amzn-errortype,x-amzn-mediapackage-last-sequence,x-amzn-mediapackage-last-updated,Content-Encoding,Date x-amzn-mediapackage-active-input: 1 x-amzn-mediapackage-channel-id: mediapackage-v2-channel access-control-allow-credentials: true #EXTM3U #EXT-X-VERSION:3 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-STREAM-INF:CODECS="avc1.640028,mp4a.40.2",AVERAGE-BANDWIDTH=5711200,RESOLUTION=1920x1080,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=5931200 hls-variant_1.m3u8 #EXT-X-STREAM-INF:CODECS="avc1.64001F,mp4a.40.2",AVERAGE-BANDWIDTH=3511200,RESOLUTION=1280x720,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=3643198 hls-variant_2.m3u8
CloudFrontでMediaPackage用OACを作成
続いて、CloudFrontでMediaPackage用のOACを作成します。以下のCloudFront Developer Guideを参照しながら進めます。
CloudFrontのマネジメントコンソールでメニューからSecurity > Origin accessと進み、[Create control settings]ボタンを押下します。Create new OACのダイアログが表れるので、NameとDescriptionを適切に入力します。Signing behaviorはUser Guide記載の内容にならい、デフォルト設定(Sign requests (recommended)
)のままにしました。Origin typeではMediaPackage V2
を選択します。
MediaPackage用のOACが作成できました!
CloudFront Distributionを作成
続いてMediaPackage v2をオリジンとするCloudFront Distributionを作成します。MediaPackage v2でのCDN利用については、その注意点などがUser guideの「Working with CDNs」にまとめられています。しかし今回はOACの動作検証が目的ですので、CDNでのコンテンツのキャッシュは行わず、またHost header以外をオリジンに転送する設定としました。本番環境で利用する際は適切な設定を行いましょう。
まずはあらかじめMediaPackage v2オリジンのドメイン名(CloudFrontのOrigin domainに設定するもの)を確認しておきましょう。先ほどライブストリーム再生などで使用したしたHLS manifest definitionsのURLを確認します。MediaPackage v2のChannel groupsから該当のChannelのOrigin endpointsを選択、Manifest settingsのタブを表示し、各manifest definitionsのURLの項目がCloudFrontのOriginとして設定するドメイン名となります。(なお本エントリではHLS manifest definitionsを使用する想定で進めます。)
このURLのドメイン部分(xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com)をOrigin domainとしてメモしておきます。CloudFrontのマネジメントコンソール、Distributionsのページから[Create distribution]ボタンで進みます。Originの項目、Origin domainの欄にこのドメイン名を入力します。(なお、2024/04/23現在でマネジメントコンソールで「MediaPackage V2 Endpoints」を選択することもできるようでしたが、Origin pathの扱いなどに不明確な点があったため、今回は直接ドメイン名を入力する方法を採りました。)また「Protocol」の項目では「HTTPS only」になっているいることを確認します。
Origin pathは空欄のまま、Origin access controlで先ほど作成したOACを選択します。「You must update the origin endpoint policy」と表示されますね。のちほど、CloudFront Distribution作成後にMediaPackage側のPolicyをアップデートします。
その他の項目として「Cache key and origin requests」では、「Cache policy」としてCachingDisabled
を、また「Origin request policy」ではAllViewerExceptHostHeader
を選択し、[Create distribution]します。
MediaPackageのEndpoint Policyの設定
Distributionの作成が成功すると、マネジメントコンソールに以下のように表示されます。
画面上部の黄色で表示されている「You must update the origin endpoint policy」の右側に表示されている[Copy policy]ボタンを押下すると以下内容がクリップボードにコピーされました。今回作成したCloudFront Distributionに対して、mediapackagev2:GetObject
を許可する内容のポリシーです。Resourceも適切に設定されていますね。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipal", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "mediapackagev2:GetObject", "Resource": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-channel-group/channel/mediapackage-v2-channel/originEndpoint/mediapackage-v2-origin-endpoint", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/ENXXXXXXXXXX" } } } ] }
これをMediaPackage Origin EndpointのEndpoint policyに設定します。青字になっているUpdate endpoint permissionsをクリックするとマネジメントコンソールの設定ページに遷移するので、そのまま[Edit]ボタンから設定を変更しました。
Attach a custom policyを選択し、コピーしたJSONをそのまま貼り付けます。
以上でMediaPackageのEndpoint policyの設定は完了です。このEndpoint policyの設定が完了すると、先ほど確認したMediaPackageへの直接アクセスによるライブストリームの視聴ができなくなります。(この点についても、のちほど実際に確認します。)なおPolicyの反映は即時ではなく、数分後に完了しているというぐあいでした。
OACを使ったCloudFront経由のアクセス確認
MediaPackageのEndpoint policyの設定を行い、CloudFront DistributionのStatusがDeployingからEnabledに代わったら、CloudFront経由でMediaPackageにアクセスして動作を確認してみます。
CloudFront経由のHLS manifestのURLは、MediaPackageへの直アクセスの際のURLのドメイン部分をCloudFront Distributionドメインに変更するだけです。以下のようになりますね。
- MediaPackageへの直接アクセス
- https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-origin-endpoint/hls-index.m3u8
- CloudFront経由のアクセス
- https://d1xxxxxxxxxxxx.cloudfront.net/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-origin-endpoint/hls-index.m3u8
macOSのSafariブラウザにこのCloudFront経由のHLS manifestのURLを入力、ライブストリームの視聴ができました。
MediaPackageのEndpoint policyではCloudFrontのOACのみアクセスを許可しているので、MediaPackageへの直接アクセスは行えません。{"Message":"Access denied."}
と表示されてしまいました。
curlコマンドでも確認してみましょう。HLS manifestのURLにGETリクエストを行います。CloudFront経由でのアクセスはHTTPステータスコード200が返り、manifestの中身も確認できます。
% curl -i https://d1xxxxxxxxxxxx.cloudfront.net/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-origin-endpoint/hls-index.m3u8 HTTP/2 200 content-type: application/vnd.apple.mpegurl content-length: 382 date: Tue, 23 Apr 2024 11:22:33 GMT x-amzn-requestid: b6xxxxf1-exx0-4xxa-axx5-4axxxxxxxx5a x-amzn-mediapackage-endpoint-id: mediapackage-v2-origin-endpoint access-control-allow-origin: * x-amzn-mediapackage-channel-uniqueid: f3xxxxxxxxxxxxxxxxxxxxxxxxxxxx9c x-amzn-mediapackage-endpoint-uniqueid: 2axxxxxxxxxxxxxxxxxxxxxxxxxxxx61 cache-control: max-age=3 access-control-expose-headers: x-amzn-requestid,x-amzn-errortype,x-amzn-mediapackage-last-sequence,x-amzn-mediapackage-last-updated,Content-Encoding,Date x-amzn-mediapackage-active-input: 1 x-amzn-mediapackage-channel-id: mediapackage-v2-channel access-control-allow-credentials: true x-cache: Miss from cloudfront via: 1.1 1bxxxxxxxxxxxxxxxxxxxxxxxxxxxx88.cloudfront.net (CloudFront) x-amz-cf-pop: NRT12-C3 x-amz-cf-id: IRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx== #EXTM3U #EXT-X-VERSION:3 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-STREAM-INF:CODECS="avc1.640028,mp4a.40.2",AVERAGE-BANDWIDTH=5711200,RESOLUTION=1920x1080,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=5931200 hls-variant_1.m3u8 #EXT-X-STREAM-INF:CODECS="avc1.64001F,mp4a.40.2",AVERAGE-BANDWIDTH=3511200,RESOLUTION=1280x720,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=3643198 hls-variant_2.m3u8
MediaPackage直接アクセスの場合はHTTPステータスコード403が返っていることが確認できます。x-amzn-errortype: AccessDeniedException
というヘッダ情報からもアクセスが禁止されていることが伺えます。
% curl -i https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-origin-endpoint/hls-index.m3u8 HTTP/2 403 date: Tue, 23 Apr 2024 11:22:35 GMT content-type: application/json content-length: 28 x-amzn-requestid: 25xxxx8f-axx2-4xx5-9xx0-53xxxxxxxx82 access-control-allow-origin: * x-amzn-errortype: AccessDeniedException access-control-expose-headers: x-amzn-requestid,x-amzn-errortype,x-amzn-mediapackage-last-sequence,x-amzn-mediapackage-last-updated,Content-Encoding,Date access-control-allow-credentials: true {"Message":"Access denied."}
CloudFront側でMediaPackage用のOACを使用するよう設定したDistributionを作成、MediaPackage側ではEndpoint policyを適切に設定することでオリジンを保護したアクセスが可能になることが確認できました。
おまけ: 特定のIPアドレスからはMediaPackageへの直接アクセスを許可する
OACを設定したCloudFront DistributionからEndpoint policyでオリジン保護したMediaPackageへのアクセスを確認してみました。CloudFrontからのアクセスのみを許可するMediaPackageオリジンがよりセキュアに設定できるようになりましたね。ところで、動作確認などのためオリジン保護はしつつも、CDN経由ではなくオリジンに直接アクセスする手段も残しておきたい、というケースもあるかと思います。Endpoint policy設定の一例として、ここではOACを使ったCloudFront経由でのアクセスを許可しつつ、さらに特定のIPアドレスの場合にはMediaPackageへの直接アクセスを許可する、という場合についても確認していおきたいと思います。
こちらはOACの設定というよりも、Endpoint policyの記述方法になるかと思います。ヘッダの値を用いたCDN認証のブログエントリのEndpoint policy記述を参考にしつつ、以下のようなPolicyを準備しました。前半はOACに用のアクセス許可そのままです。後半のハイライト部分が「特定のIPアドレスはMediaPackageへの直接アクセスを許可する」部分となります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipal", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "mediapackagev2:GetObject", "Resource": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-channel-group/channel/mediapackage-v2-channel/originEndpoint/mediapackage-v2-origin-endpoint", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/ENXXXXXXXXXXX" } } }, { "Sid": "AllowFromSpecifiedIPAddress", "Effect": "Allow", "Principal": "*", "Action": "mediapackagev2:GetObject", "Resource": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-channel-group/channel/mediapackage-v2-channel/originEndpoint/mediapackage-v2-origin-endpoint", "Condition": { "IpAddress": { "aws:SourceIp": "XXX.XXX.XXX.XXX/32" } } } ] }
MediaPackage Origin EndpointのEndpoint policyに設定します。IPアドレス部分には筆者の作業環境で利用しているIPアドレスを設定しました。
Policyでアクセスを許可したIPアドレスからはMediaPackageに直接アクセスすることが可能です。HTTPステータスコード200が返り、manifestの内容が確認できますね。
% curl -i https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-origin-endpoint/hls-index.m3u8 HTTP/2 200 date: Tue, 23 Apr 2024 11:33:21 GMT content-type: application/vnd.apple.mpegurl content-length: 382 x-amzn-requestid: f9xxxx03-6xxf-4xx8-8xx1-81xxxxxxxxb6 x-amzn-mediapackage-endpoint-id: mediapackage-v2-origin-endpoint access-control-allow-origin: * x-amzn-mediapackage-channel-uniqueid: f3xxxxxxxxxxxxxxxxxxxxxxxxxxxx9c x-amzn-mediapackage-endpoint-uniqueid: 2axxxxxxxxxxxxxxxxxxxxxxxxxxxx61 cache-control: max-age=3 access-control-expose-headers: x-amzn-requestid,x-amzn-errortype,x-amzn-mediapackage-last-sequence,x-amzn-mediapackage-last-updated,Content-Encoding,Date x-amzn-mediapackage-active-input: 1 x-amzn-mediapackage-channel-id: mediapackage-v2-channel access-control-allow-credentials: true #EXTM3U #EXT-X-VERSION:3 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-STREAM-INF:CODECS="avc1.640028,mp4a.40.2",AVERAGE-BANDWIDTH=5711200,RESOLUTION=1920x1080,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=5931200 hls-variant_1.m3u8 #EXT-X-STREAM-INF:CODECS="avc1.64001F,mp4a.40.2",AVERAGE-BANDWIDTH=3511200,RESOLUTION=1280x720,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=3643198 hls-variant_2.m3u8
アクセスを許可していないIPアドレスの例として、AWS CloudShell環境からアクセスして動作を確認してみます。CloudFront経由ではアクセス可能ですが、MediaPackageへの直接のアクセスはできません。
[cloudshell-user@ip-10-132-78-201 ~]$ curl -i https://d1l982drp8coj7.cloudfront.net/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-origin-endpoint/hls-index.m3u8 HTTP/2 200 content-type: application/vnd.apple.mpegurl content-length: 382 date: Tue, 23 Apr 2024 11:33:25 GMT x-amzn-requestid: acxxxx19-7xx5-4xx7-bxxd-d3xxxxxxxx3d x-amzn-mediapackage-endpoint-id: mediapackage-v2-origin-endpoint access-control-allow-origin: * x-amzn-mediapackage-channel-uniqueid: f3xxxxxxxxxxxxxxxxxxxxxxxxxxxx9c x-amzn-mediapackage-endpoint-uniqueid: 2axxxxxxxxxxxxxxxxxxxxxxxxxxxx61 cache-control: max-age=3 access-control-expose-headers: x-amzn-requestid,x-amzn-errortype,x-amzn-mediapackage-last-sequence,x-amzn-mediapackage-last-updated,Content-Encoding,Date x-amzn-mediapackage-active-input: 1 x-amzn-mediapackage-channel-id: mediapackage-v2-channel access-control-allow-credentials: true x-cache: Miss from cloudfront via: 1.1 cexxxxxxxxxxxxxxxxxxxxxxxxxxxx6a.cloudfront.net (CloudFront) x-amz-cf-pop: NRT12-C3 x-amz-cf-id: Hixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx== #EXTM3U #EXT-X-VERSION:3 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-STREAM-INF:CODECS="avc1.640028,mp4a.40.2",AVERAGE-BANDWIDTH=5711200,RESOLUTION=1920x1080,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=5931200 hls-variant_1.m3u8 #EXT-X-STREAM-INF:CODECS="avc1.64001F,mp4a.40.2",AVERAGE-BANDWIDTH=3511200,RESOLUTION=1280x720,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=3643198 hls-variant_2.m3u8
[cloudshell-user@ip-10-132-78-201 ~]$ curl -i https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-origin-endpoint/hls-index.m3u8 HTTP/2 403 date: Tue, 23 Apr 2024 11:33:28 GMT content-type: application/json content-length: 28 x-amzn-requestid: 1cxxxx33-5xxb-4xx9-9xxe-b3xxxxxxxxfb access-control-allow-origin: * x-amzn-errortype: AccessDeniedException access-control-expose-headers: x-amzn-requestid,x-amzn-errortype,x-amzn-mediapackage-last-sequence,x-amzn-mediapackage-last-updated,Content-Encoding,Date access-control-allow-credentials: true {"Message":"Access denied."}
まとめ
Amazon CloudFrontのOAC (Origin Access Control)がAWS Elemental MediaPackageオリジンをポートしたアップデートについてお届けしました。CloudFront側でMediaPackage用のOACを作成、DistributionにこのOACを利用するよう設定します。MediaPackage側ではOrigin EndpointのEndpoint policyにて、このOACに対してアクセス許可を設定します。これまでのヘッダの値を使用したCDN認証よりも、よりセキュアにオリジンを保護することが可能です。MediaPackage Live v2のみが現在のOACのサポート対象、MediaPackage v1 (Live/VOD)は非サポートである点に注意しましょう。
個人的にはMediaPackage v2がリリースされた当初から、OACとEndpoint policyの設定でオリジン保護ができそうだなぁと考えていたこともあり(このタイミングでMediaStoreはOACをサポートしていましたしね)、待望のアップデートです!またCloudFront OACも様々なリソースに対応しているなぁとしみじみと感じております。